import java.io.*;
import java.util.Scanner;

public class TestDemo14 {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要扫描的路径：");
        String rootDirectoryPath = sc.next();
        System.out.println("输入要查询的文件名关键字：");
        String keyword =  sc.next();
        File file = new File(rootDirectoryPath);
        if(!file.isDirectory()){
            // 此路径不存在
            System.out.println("输入的扫描路径错误！");
            return;
        }
        //3、进行递归遍历
        scannerDirectory(file,keyword);
    }
    private static void  scannerDirectory(File file,String keyword) throws IOException {
        // 1、先列出 file 中 有哪些内容
        File[] files = file.listFiles();
        if(files == null){
            return;
        }
        for (File f: files) {
            if(f.isFile()){
                // 针对普通文件的内容，进行判断，是否满足查询条件【文件内容 是否包含 关键字keyword】
                if(containsKeyword(f,keyword)){
                    System.out.println(f.getCanonicalPath());
                }
            }else if(f.isDirectory()){
                // 针对目录进行递归
                scannerDirectory(f,keyword);
            }
        }
    }
    private static boolean containsKeyword(File f,String keyword){
        //把 f 中的内容 都读出来，进行遍历，放到一个 StringBuilder 中
        StringBuilder stringBuilder = new StringBuilder();
        try (Reader reader = new FileReader(f)){
            char[] buffer = new char[1024];
            while(true){
                int len = reader.read(buffer);
                if(len == -1){
                    break;
                }
                // 把这一段读到的结果，放到 StringBuilder中
                stringBuilder.append(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        // indexOf 返回的是子串（keyword）的下标，如果 word 在 stringBuilder中不存在，则返回 -1。
        return stringBuilder.indexOf(keyword) != -1;
    }
}
